 1.Apache Druid简介及架构之Druid概述下什么是Druid
   
   数据分析的基础架构可以分为以下几类：
       使用Hadoop/Spark进行分析
       将Hadoop/Spark的结果导入 RDBMS 中提供数据分析
       将结果保存到容量更大的 NoSQL 数据库中，解决数据分析的存储瓶颈，例如：HBase
       将数据源进行流式处理，对接流式计算框架（如Storm、Spark、Flink），结果保存到 RDBMS或NoSQL中
       将数据源进行流式处理，对接分析数据库，例如：Druid
   互联网技术的快速增长催生了各类大体量的数据，Hadoop很大的贡献在于帮助企业将他们那些低价值的事件流数据
转化为高价值的聚合数据；
   Hadoop擅长的是存储和获取大规模数据，它并不提供任何性能上的保证它能多快获取到数据。虽然Hadoop是一个
高可用的系统，但在高并发负载下性能会下降；
   Hadoop是一个很好的后端、批量处理和数据仓库系统。在一个需要高并发并且保证查询性能和数据可用性的并需要
提供产品级别的保证的需求，Hadoop并不能满足。
   Druid 是 Metamarkets 公司（一家为在线媒体或广告公司提供数据分析服务的公司）推出的一个分布式内存实时分
析系统，用于解决如何在大规模数据集下进行快速的、交互式的查询和分析。
   Druid 是一个开源的数据分析引擎工具，为实时和历史数据的次秒级（多于一秒）查询设计。主要应用于对数据的
OLAP查询，Druid 提供低延迟（实时）的数据摄取、灵活的数据探索、快速的数据聚合。现有的 Druid 部署已支持
扩展到数万亿时间和 PB 级数据。

 2.与其他OLAP技术对比
   
              Druid Kylin   ES  Spark SQL ClickHouse
   数据规模   超大  超大   中等    超大       中
   查询效率   高     高    中等     低        高
   并发度     高     高     高      低        中
   灵活性     中     低     高      高        高
   SQL支持    中     高     中      高        高
   
   SparkSQL / Impala / ClickHouse，支持海量数据，灵活性强，但对响应时间是没有保证的。当数据量和计算复杂度
增加后，响应时间会变慢，从秒级到分钟级，甚至小时级都有可能。
   搜索引擎架构的系统（Elasticsearch等），在入库时将数据转换为倒排索引。牺牲了灵活性换取很好的性能，在搜索
类查询上能做到亚秒级响应，但是对于扫描聚合为主的查询，随着处理数据量的增加，响应时间也会退化到分钟级。
   Druid / Kylin，则在入库时对数据进行预聚合，进一步牺牲灵活性换取性能，以实现对超大数据集的秒级响应。
       Kylin 利用 Hadoop/HBase 做计算和存储，使用 SQL 查询，提供 JDBC/ODBC 驱动与常见 BI 工具集成
       Druid 有自己独立的分布式集群，能够实时摄入数据，有自己的查询接口（与BI兼容性较弱），通常多用于实时
要求高的场景
   目前没有一个OLAP分析引擎能在数据量、灵活程度、性能（吞吐&并发）做到完美，需要基于自己的业务场景进行
取舍和选型。

 3.技术特点
   
   Apache Druid是一个开源的、分布式、实时OLAP分析工具。Druid的核心设计结合了数据仓库、时间序列数据库和
搜索系统的思想，适用于多种场景的高性能数据实时分析。Druid将这三个系统中的每个系统的关键特征合并到其接
收层、存储格式、查询层和核心体系结构中。   
   时间序列数据库主要用于指处理，带时间标签（按照时间的顺序变化）的数据，带时间标签的数据也称为时间序列数
据。
   1).主要特点
   列式存储
   Druid 独立的存储和压缩每一列，只需要读取特定查询所需的内容，这可以支持快速扫描、排名和聚合
   流式和批量摄取(Ingestion)
   支持 Apache Kafka、HDFS、AWS S3、stream processors 等现成连接器
   本地的搜索索引
   Druid 为字符串创建倒排索引，以支持快速搜索和排序
   灵活的 schema
   Druid 可以处理变化的 schema 和嵌套数据
   基于时间优化 partition
   Druid 基于时间智能的对数据进行分区，基于时间的查询比传统数据库要快得多
   支持 SQL
   Druid 支持本机的 JSON 语言，还支持基于 HTTP 或者 JDBC 的 SQL
   水平扩展性
   Druid 已经用户生产环境中，每秒接收数百万个事件，保存多年的数据并提供次秒级查询
   操作简单
   只需要增加或删除服务器即可扩展或缩小规模，Druid 会自动平衡，容错架构通过服务器的故障进行路由
   2).集成
   Druid是开源大数据技术的补充，包括Apache Kafka，Apache Hadoop，Apache Flink等，通常位于存储或处理层
与最终应用之间，充当查询层或数据分析服务。
   3).Ingestion(摄取)
   Druid支持流式传输和批量摄取。Druid连接到数据源，包括：Kafka（用于流数据加载），或分布式文件系统，如
HDFS（用于批处理数据加载）。
   Druid在 “索引” 过程中将数据源中的原始数据转换为支持高效读取的优化格式（Segment，段）。
   4).存储
   Druid的数据存储采用列式存储格式。根据列的类型（字符串，数字等），应用不同的压缩和编码方法，根据列类型
构建不同类型的索引。
   Druid为字符串列构建倒排索引，以进行快速搜索和过滤。Druid可按时间对数据进行智能分区，以实现面向时间的
快速查询。
   Druid在摄取数据时对数据进行预聚合，节省大量存储空间。
   5).查询方式
   Druid支持JSON、SQL两种方式查询数据。
 
 4.应用场景
   
   Druid擅长的部分
	   对于大部分查询场景可以亚秒级响应
	   事件流实时写入与批量数据导入兼备
       数据写入前预聚合节省存储空间，提升查询效率
       水平扩容能力强
       社区活跃
   是否需要使用Druid
	   处理时间序列事件
       快速的聚合以及探索式分析
	   近实时分析亚秒级响应
	   存储大量(TB级、PB级)可以预先定义若干维度的事件
	   无单点问题的数据存储